Soy bastante nuevo en reaccionar nativo y encontré una solución simple del tutorial para buscar y cargar el caso
export const useFetching = (callback) => { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); const fetching = async(data) => { try{ setIsLoading(true); await callback(data); } catch(e) { setError(e.message); } finally { setIsLoading(false); } } return [fetching, isLoading, error]; }Lo uso con la función de registro de los documentos de navegación de reacción como una devolución de llamada, que se supone que cambia la pantalla a la aplicación principal:
signIn: async (data) => { const token = await AuthManager.login(data); if (token) dispatch({ type: 'SIGN_IN', token: 'dummy-auth-token' });Pero cuando lo llamo, aparece "No se puede realizar una actualización de estado de React en un componente desmontado". Descubrí que:
useEffect(() => {return () => {}},[]) insertado en la pantalla de inicio de sesión elimina el problemaMe pregunto, ¿hay alguna solución normal en este caso y por qué useEffect ayuda aquí?
Cambiar el estado en un componente desmontado es una medida ilegal en reaccionar.
Este es un plan de eventos simple en el ciclo de vida de su componente:
catch(e) { setError(e.message); } , pero hay un problema: setState (setError).finalmente, el código de bloque también se ejecuta, por lo que debe verificar si el componente está montado antes de setState.